#include<iostream>
#include<vector>
using namespace std;


int findMaxForm(vector<string>& strs, int m, int n) {
    int len = strs.size();
    vector<vector<int>>dp(m + 1, vector<int>(n + 1));

    for (int i = 1; i <= len; i++) {
        int a = 0, b = 0;
        for (auto c : strs[i - 1]) {
            if (c == '0')
                a++;
            else
                b++;
        }
        for (int j = m; j >= a; j--) {
            for (int k = n; k >= b; k--) {
                dp[j][k] = max(dp[j][k], dp[j - a][k - b] + 1);
            }
        }
    }

    return dp[m][n];
}

int main()
{
    vector<string> strs = {"10", "0001", "111001", "1", "0"};
    int m = 5, n = 3;
    cout << findMaxForm(strs,m,n) << endl;
    return 0;
}